#include <complex.h>
#include <math.h>

static double _Complex poly_val(double p[], int n, double omega)
{
    int i;
    double _Complex z, sum = 0;
    for (i = 0; i < n; i++)
    {
        z = cos(i * omega) - I * sin(i * omega);
        sum += p[i] * z;
    }
    return sum;
}
/** 
 * 计算数字滤波器的频率响应 
 * num 是数字滤波器的分子多项式系数 
 * den 是数字滤波器的分母多项式系数 
 * num_order 是分子多项式的阶数 
 * den_order 是分母多项式的阶数 
 * len 为，频率响应的取样点数 
 */  
void gain(double num[], double den[], int num_order, int den_order, double _Complex out[], int len)
{
    double omega;
    int i;
    for (i = 0; i < len; i++)
    {
        omega = M_PI * i / (len-1);
        out[i] = poly_val(num, num_order + 1, omega) / poly_val(den, den_order + 1, omega);
    }
}